package com.gralves.elasticsearch.utils.bulk;

import com.gralves.elasticsearch.utils.util.bean.PageQuery;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;

import java.util.ArrayList;
import java.util.HashMap;

/**
 * @author zhouyibin
 * @date 2018/12/21
 * @desc es增删改查服务
 */
public interface EsCommonService {
    /**
     * 批量插入数据
     *
     * @param index        索引名称
     * @param type         类型名称
     * @param key          主键字段
     * @param entityParams 实体属性集合
     * @return 批量插入结果
     */
    BulkResponse documentsInsert(String index, String type, String key, ArrayList<HashMap<String, Object>> entityParams);

    /**
     * 插入数据
     *
     * @param index        索引名称
     * @param type         类型名称
     * @param key          主键字段
     * @param entityParams 实体属性
     * @return 批量插入结果
     */
    IndexResponse documentInsert(String index, String type, String key, HashMap<String, Object> entityParams);

    /**
     * 批量删除文档
     *
     * @param index       索引名称
     * @param type        类型名称
     * @param documentIds 文档id集合
     * @return 批量删除结果集
     */
    BulkResponse deleteDocuments(String index, String type, ArrayList<String> documentIds);

    /**
     * 批量删除文档
     *
     * @param index      索引名称
     * @param type       类型名称
     * @param documentId 文档id
     * @return 删除结果集
     */
    DeleteResponse deleteDocument(String index, String type, String documentId);

    /**
     * 根据id获取文档内容
     *
     * @param index      索引
     * @param type       类型
     * @param documentId id
     * @return 文档内容
     */
    GetResponse getDocument(String index, String type, String documentId);

    /**
     * 自定义条件查询
     *
     * @param index     索引名
     * @param type      索引类型
     * @param pageQuery 分页查询参数
     * @return 分页查询结果
     */
    SearchResponse customQuery(String index, String type, PageQuery pageQuery);

}
